# 定义一个装饰器,闭包三部曲，嵌套，引用，返回
# 1. 嵌套
def check(fn):
    def inner():
        # 编写装饰器功能
        print("请先登陆")
        # 2. 引用
        fn()

    # 3. 返回
    return inner


# ———————————————— 第一种方式 ————————————————
# 定义一个函数
def comment():
    print("编写评论")


# 通过装饰器调用函数 comment，将 comment 函数的内存地址赋值给了 fn，check 函数内部的  fn() 则相当于运行函数 comment()
new_comment = check(comment)
# new_comment 赋值的是 inner 函数的内存地址，运行 new_comment()，则相当于运行 inner()
new_comment()


# ———————————————— 第二种方式 ————————————————
@check
def comment_a():
    print("编写评论")


# 两种方式的结果是相同的，
comment_a()
